SSH框架整合-慕课课程
学习时间:2018年12月3日
慕课链接:基于SSH实现员工管理系统之框架整合篇
内容:Struts2+Hibernate+Spring框架整合,分为Struts2整合Spring和Spring整合Hibernate两步进行
源码:Github:SSH_Base
一、开发环境搭建
1. jar 包导入
2. 引入相关配置文件
-
web.xml-->Struts2 过滤器配置
<!-- Struts2 过滤器的配置--> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
struts2.xml -->src
>struts-2.3.36-all.zip\struts-2.3.36\apps\struts2-blank-2.3.36.war\WEB-INF\classes\struts2.xml
-
web.xml -->Spring 核心监听器
> ContextLoaderListener--> ContextLoader --> 105:contextConfigLocation
<!-- Spring 核心监听器 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
- applicationContext.xml
3. 创建包结构和实体
- 包结构:
- com.ssh.action
- com.ssh.dao-
- com.ssh.domain - 实体 product
- com.ssh.service
二、Struts2整合Spring
1. 页面创建
- 使用struts2标签 布局页面
<s:form action="" method="post" namespace="/" theme="simple">
<table border="1" width="400">
<tr>
<td>商品名称:</td>
<td><s:textfield name="pname"/></td>
</tr>
<tr>
<td>商品价格:</td>
<td><s:textfield name="price"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="添加" /></td>
</tr>
</table>
</s:form>
2. 编写Action,Service,Dao的类
-
com.ssh.action
ProductAction //商品管理的Action
public class ProductAction extends ActionSupport implements ModelDriven<Product>{ //^extends ActionSupport implements ModelDriven<Product> (模型驱动的接口) //模型驱动使用的类 private Product product = new Product(); @Override public Product getModel() { // TODO Auto-generated method stub return product; } /*注入Service struts2-spring-plugin-2.3.36.jar > struts-plugin.xml > struts.objectFactory >struts.objectFactory.spring.autoWire = name 自动装配*/ /*Struts 和Spring 整合过程中按名字自动注入业务层的类*/ private ProductService productService; public void setProductService(ProductService productService) { this.productService = productService; } }
-
com.ssh.dao
ProductDao //商品管理的DAO
-
com.ssh.domain
实体 product
-
com.ssh.service
ProductService //商品管理的业务层
//业务层 注入Dao的类 private ProductDao productDao; public void setProductDao(ProductDao productDao) { this.productDao = productDao; }
3. 配置Action,Service,Dao的类
-
aplicationContext.xml 配置业务层的类 *
<!-- 配置业务层的类 --> <bean id="productService" class="com.epoint.ssh.service.ProductService"> <property name="productDao" ref="productDao"/> </bean> <!-- 配置DAO的类 --> <bean id="productDao" class="com.epoint.ssh.dao.ProductDao"> </bean>
-
Struts2和Spring整合的两种方式
-
(1) Action 类由Struts2 自身创建
-
struts2.xml————>
<s:form action="product_save" method="post" namespace="/" theme="simple">
- 在applicationContext.xml中配置Service DAO 两个<bean>标签(上一步*)
-
-
(2)actio 类交给Spring创建
<!--配置action类 --> <bean id="productAction" class="com.epoint.ssh.action.ProductAction" scope="prototype"> <!--手动注入service --> <property name="productService" ref="productService"></property> </bean> <package name="ssh" extends="struts-default" namespace="/"> <action name="product_*" class="productAction" method="{1}" > </action> </package>
-
- Action中执行的方法
三、Sprinng整合 Hibernate
1. 创建数据库
create database myssh
2. 创建映射文件 以及Spring中的配置
-
/ssh/src/com/epoint/ssh/domain/Product.hbm.xml
--> /org/hibernate/hibernate-mapping-3.0.dtd
<hibernate-mapping> <class name="com.epoint.ssh.domain.Product" table="product"> <id name="pid" column="pid"> <generator class="native"/><!-- native表示自增 --> </id> <property name="pname" column="pname" length="20"/> <property name="price" column="price"/> </class> </hibernate-mapping>
-
applicationContext.xml
<!-- 引入外部配置文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/myssh?useSSL=false"/> <property name="user" value="root"/> <property name="password" value="Gepoint"/> </bean> <!-- 配置Hibernate --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!--注入连接池 --> <property name="dataSource" ref="dataSource"></property> <!--配置Hibernate属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><!--方言 --> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!--加载Hibernate配置文件 --> <property name="mappingResources"> <list> <value>com/epoint/ssh/domain/Product.hbm.xml</value> </list> </property> </bean>
3. 编写DAO的代码
-
注入SessionFactory:
- 在 Dao 上extends HibernateDaoSupport
- 配置applicationContext中的Dao
<bean id="productDao" class="com.epoint.ssh.dao.ProductDao"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
-
在Dao中调用模板完成保存操作
this.getHibernateTemplate().save(product)
4. 添加事务管理
<!-- 配置事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
5.问题
-
错误1:
Causedby:java.lang.ClassNotFoundException:com.mchange.v2.c3p0.ComboPooledDataSource
解决:
1.导入c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar(有的导入就解决,有的还会报错,报错的看第二步)
2.对于<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><bean>
中的class不能直接复制粘贴,要通过“提示”敲出来,如果直接复制或者不按提示敲出来可能还会继续报同样的错误 -
错误2:
Loading class 'com.mysql.jdbc.Driver'. This is deprecated.
解决:
com.mysql.jdbc.Driver 改为 com.mysql.cj.jdbc.Driver -
错误3:
MYSQL:WARN: Establishing SSL connection without server's identity verification is not recommended.
解决:
jdbc:mysql://localhost:3306/test?useSSL=false -
错误4:
java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)
解决:
参考:java.sql.SQLException
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。